Best Practices for VPC IP Address Allocation
缘起
如今公有云用的越来越多,各个区域、不同可用区,还有各种特殊服务,再加上也许还有自建 IDC,还有办公网内网。我的传统是会将这些内网打通的。所以,各个节点网络的 IP 地址分配策略(方案)就成了一个绕不开的话题。
背景介绍
- region: 公有云厂商每个 region(我喜欢叫做节点)里可以创建多个 VPC
- zone: 每个 region 会有三个或更多的可用区(zone),每个可用区可以看作是一个数据中心(IDC)
- subnet: subnet(子网) 会在某个可用区(zone)里创建。
VPC 分配策略
我常用的一些 VPC 创建管理策略:
- 生产(Product)、测试(testing)和 Stage 环境(如果有的话)一般会单独一个 VPC
- infrastracture 的相关机器(比如 Gitlab、VPN server、日志处理和监控报警等)也会一个单独的 VPC(规模相对较小)
VPC 下 subnet 的策略
- 公有云厂商一般会建议每个 VPC 至少要跨两个可用区(为了冗余,避免某个可用区挂掉导致所有服务不可用),我一般会跨三个可用区。
- 公有云厂商会建议 VPC 下的子网(subnet)分成公网子网(配公网 IP)和私网子网(不配公网 IP)。
VPC 中的 IP 分配
私网地址
这里指的是在 RFC 1918 里定义的“私有地址空间(Private Address Space)”,各大公有云厂商允许分配给 VPC 的 IP 地址只能是这其中的。
- 10.0.0.0/8(从 10.0.0.0 到 10.255.255.255)
- 172.16.0.0/12(从 172.16.0.0 到 172.31.255.255)
- 192.168.0.0/16(从 192.168.0.0 到 192.168.255.255)
VPC 和 subnet 的 IP 分配要求
- 每个 VPC 要分一段(上面提到的)私网地址
- VPC 下的每个 subnet 也要独占一段其 VPC 占有的私网地址中的一段
IP 分配策略
VPC
- 根据 VPC 的数量多少选用 10 段、172 段还是 192 段的 IP
- 每个 VPC 根据需求大小选一个或多个 C 段地址,当然更小也是可以的,比如半个 C 段(比如有些 infrastructure)。
subnet
以最简单的 VPC 配置四个 C 段地址为例(我常用是一个 VPC 两个 C 段),假设其是 10.0.0.0/22(也就是 10.0.0.0/24、10.0.1.0/24、10.0.2.0/24 和 10.0.3.0/24 四个 C 段),那么:
找三个可用区,
- 分别建立一个私网子网,分配 IP 地址段:
- 10.0.0.0/24
- 10.0.1.0/24
- 10.0.2.0/24
- 分别建立一个公网子网,分配 IP 地址段:
- 10.0.3.0/26
- 10.0.3.64/26
- 10.0.3.128/26
可以看出这个 VPC 还剩一段 IP:10.0.3.192/26,这一段就留作冗余。
注意:
- VPC 的 internet gateway 要放到公网子网里
- VPC 的 SNAT 设备要放到公网子网里
- VPC 的公网子网的 default gateway 指向的是 internet gateway
- VPC 的私网子网的 default gateway 指向的是 SNAT 设备
待续
本方案并没有考虑 IPv6 的情况,以后有机会更新的时候,会把 IPv6 的支持考虑进去。